Conversation
Update Jest related packages to ^28. This resolves a peer dependency warning from `ts-jest` about the version of `typescript` we're using being too high. Here are the relevant changelogs: * `ts-jest`: https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md#2800-2022-05-02 * None of the breaking changes impacted us here * `jest`: https://github.com/jestjs/jest/releases/tag/v28.0.0 * Blog post: https://jestjs.io/blog/2022/04/25/jest-28 * Migration guide: https://jest-archive-august-2023.netlify.app/docs/28.x/upgrading-to-jest28/
- Clear native fetch in Node.js 18+ before importing isomorphic-fetch - This ensures isomorphic-fetch uses node-fetch (which nock can intercept) instead of native fetch (which uses undici and nock cannot intercept) - Simplify nock cleanup by removing redundant afterAll hook - Fixes 'TypeError: fetch failed' errors in tests with nock mocks
- Add 'export {};' at top of file to satisfy import-x/unambiguous lint rule
- Fixes 'This module could be parsed as a valid script' error
- Remove eslint suppressions for nock.ts (no longer needed)
- Adjust coverage thresholds in bridge-status-controller (lines/statements: 100 -> 99)
- Format jest.useFakeTimers({}) calls consistently
- Reorder imports in TestStrategy.test.ts
- Add resolution override to force ^5.0.0 to use ^5.0.1 - Fixes invalid resolution error when @metamask/eth-json-rpc-infura depends on ^5.0.0 while root package.json specifies ^5.0.1 - Update yarn.lock to reflect the resolution change
…tibility # Conflicts: # eslint-suppressions.json # package.json # packages/account-tree-controller/package.json # packages/accounts-controller/package.json # packages/address-book-controller/package.json # packages/analytics-controller/package.json # packages/announcement-controller/package.json # packages/app-metadata-controller/package.json # packages/approval-controller/package.json # packages/assets-controllers/package.json # packages/base-controller/package.json # packages/bridge-controller/package.json # packages/bridge-status-controller/jest.config.js # packages/bridge-status-controller/package.json # packages/build-utils/package.json # packages/chain-agnostic-permission/package.json # packages/claims-controller/package.json # packages/composable-controller/package.json # packages/controller-utils/package.json # packages/core-backend/package.json # packages/delegation-controller/package.json # packages/earn-controller/package.json # packages/eip-5792-middleware/package.json # packages/eip-7702-internal-rpc-middleware/package.json # packages/eip1193-permission-middleware/package.json # packages/ens-controller/package.json # packages/error-reporting-service/package.json # packages/eth-block-tracker/package.json # packages/eth-json-rpc-middleware/package.json # packages/eth-json-rpc-provider/package.json # packages/foundryup/package.json # packages/gas-fee-controller/package.json # packages/gator-permissions-controller/package.json # packages/json-rpc-engine/package.json # packages/json-rpc-middleware-stream/package.json # packages/keyring-controller/package.json # packages/logging-controller/package.json # packages/message-manager/package.json # packages/messenger/package.json # packages/multichain-account-service/package.json # packages/multichain-api-middleware/package.json # packages/multichain-network-controller/package.json # packages/multichain-transactions-controller/package.json # packages/name-controller/package.json # packages/network-controller/package.json # packages/network-enablement-controller/package.json # packages/notification-services-controller/package.json # packages/permission-controller/package.json # packages/permission-log-controller/package.json # packages/permission-log-controller/tests/PermissionLogController.test.ts # packages/phishing-controller/package.json # packages/polling-controller/package.json # packages/preferences-controller/package.json # packages/profile-sync-controller/package.json # packages/ramps-controller/package.json # packages/rate-limit-controller/package.json # packages/remote-feature-flag-controller/package.json # packages/sample-controllers/package.json # packages/seedless-onboarding-controller/package.json # packages/selected-network-controller/package.json # packages/shield-controller/package.json # packages/signature-controller/package.json # packages/subscription-controller/package.json # packages/transaction-controller/package.json # packages/transaction-pay-controller/package.json # packages/user-operation-controller/package.json # tests/setup.ts # tests/setupAfterEnv/nock.ts # yarn.lock
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
|
Warning MetaMask internal reviewing guidelines:
Ignoring alerts on:
|
21baf16 to
90150e5
Compare
- Update jest-environment-jsdom to ^29.0.0 for Jest 28 compatibility
- Update jest.environment.js files to use correct import syntax for v29:
- JSDOMEnvironment = require('jest-environment-jsdom').default
- NodeEnvironment = require('jest-environment-node').default
- Add jest-environment-jsdom to packages using testEnvironment: 'jsdom'
- Configure ts-jest with isolatedModules and diagnostics:false to skip
type checking during tests (should be done separately via build:types)
Affected packages:
- assets-controllers
- bridge-controller
- bridge-status-controller
- controller-utils
- core-backend
- keyring-controller
- network-controller
- notification-services-controller
- profile-sync-controller
- seedless-onboarding-controller
- selected-network-controller
- transaction-controller
- Add uuid to root devDependencies to fix n/no-extraneous-require error - Add import-x/no-unassigned-import disable comment for isomorphic-fetch require
Update packages that were missed during merge conflict resolution: - ai-controllers - analytics-data-regulation-controller - assets-controller - connectivity-controller - perps-controller - profile-metrics-controller - storage-service All packages now use: - @types/jest: ^28.0.0 - jest: ^28.0.0 - ts-jest: ^28.0.0
Update fake timers syntax from jest.useFakeTimers('modern') to
jest.useFakeTimers() for Jest 28 compatibility.
…lity Fix fake timers usage in threshold cache cleanup test. The test was calling jest.useFakeTimers() mid-test after async operations completed with real timers, causing inconsistent Date.now() behavior. Updated to use fake timers from the start of the test and jest.setSystemTime() to control time advancement.
90150e5 to
83a183d
Compare
a381b1f to
7ac76e3
Compare
|
@SocketSecurity ignore npm/@types/jsdom@16.2.15 |
40f282f to
7ac76e3
Compare
Explanation
References
Checklist
Note
Medium Risk
Large-scale test tooling upgrade that changes timer behavior and environment setup across many packages; main risk is flaky or behaviorally-different tests rather than production logic.
Overview
Upgrades the monorepo’s Jest stack from v27 to v28 (including
ts-jest,@types/jest, and package-leveljest-environment-*deps) across many workspaces.Adjusts Jest configuration and module resolution: adds explicit
uuidmapping, enablesfakeTimers.doNotFake: ['performance']for Node v24 compatibility, and updates.depcheckrc.ymlignores for Jest environments.Updates custom Jest environments to the v28 API (
{ TestEnvironment }) and refactors numerous tests to be compatible with Jest 28/fake-timers changes (more explicitsinon.useFakeTimerstargets, mockingperformance.now, and a few addedadvanceTimersByTime(0)/timeout tweaks). Also updatestests/setup.tsto forceisomorphic-fetch/node-fetchsonockcan intercept requests on Node 18+.Written by Cursor Bugbot for commit 40f282f. This will update automatically on new commits. Configure here.